
/**
 * Created by Administrator on 2016/3/15.
 * 该包依赖包
 *      jQuery
 *      artTemplate
 *      jQuery-cookie
 *      json2
 */

//$(function(){
    var isLog = false;
    /**
     * 获取数据
     * @param url       数据来源
     * @param opation   传参
     * @param htmlurl   html数据显示地址
     * @param scripturl script模板地址
     * @param cookies   是否要进行cookie
     * @param callback  回调函数
     * @param isLog     是否打印日志(用于数据调试)
     */
    function geetdata(url, opation, htmlurl, scripturl, cookies, isLog, callback) { 
        printLog("geetdata",null, null, isLog);
        $.getJSON(url, opation, function(json){
            printLog("geetdata","getjson",json,isLog);
            view(json,  htmlurl, scripturl, isLog);
            if(cookies != null && cookies!= '') {
                //alert(opation);
                opation.pageCount = json.data.pageCount;
                opation.total = json.data.total;
                saveOpation(cookies, JSON.stringify(opation));
            }

            if(callback) {
            	callback();
            }
        })
    }

    /**
     * 页面显示数据
     * 目的：样式和数据分离
     * @param json      数据格式为json数据
     * @param htmlurl   html地址
     * @param scripturl script脚本地址
     */
    function view(json, htmlurl, scripturl, isLog) {
        var $varietyContent = $(htmlurl),
            varietyHtml = template(scripturl, json);
        $varietyContent.html(varietyHtml);
        printLog("view", null, "页面数据渲染", isLog);
    }

    /**
     * 利用cookie保存翻页数据
     * @param name  cookie名称
     * @param value 分页数据
     */
    function saveOpation(name, value) {
        $.cookie(name, value, {path:"/"});
        //$.cookie(name,value,{path:'/'});
        printLog("saveOpation", null, "翻页数据以保存"+value, isLog);
    }
    /**
     * 首页
     */
    function fristPage(name, url, htmlurl, scripturl, cookies, isLog, callback) {
        var value = $.cookie(name);
        var opation = JSON.parse(value);
        opation.pageNo = 1;
        geetdata(url, opation, htmlurl, scripturl, name, isLog, callback);
        printLog("fristPage",null,opation, isLog);
    }
    /**
     * 上一页
     * @param name
     * @param url
     * @param htmlurl
     * @param scripturl
     * @param cookies
     * @param isLog
     */
    function pre(name, url, htmlurl, scripturl, cookies, isLog, callback) {
        var value = $.cookie(name);
        var opation = JSON.parse(value);
        if(opation.pageNo > 1) {
            opation.pageNo = opation.pageNo - 1;
        }
        geetdata(url, opation, htmlurl, scripturl, name, isLog, callback);

        printLog("pre", null, "opation" + opation, isLog)
    }

    /**
     * 跳到n页
     */
    function toPage(pageNo, name, url, htmlurl, scripturl, cookies, isLog, callback) {
        var value = $.cookie(name);
        var opation = JSON.parse(value);
        opation.pageNo = pageNo;

        geetdata(url, opation, htmlurl, scripturl, name, isLog, callback);
        printLog("toPage",null,opation, isLog);
    }

    /**
     * 下一页
     */
    function next(name, url, htmlurl, scripturl, cookies, isLog, callback) {
        var value = $.cookie(name);
        var opation = JSON.parse(value);
        if(opation.total%opation.pageSize == 0) {
            opation.pageCount = opation.total/opation.pageSize;
        }
        if(opation.pageNo < opation.pageCount) {
            opation.pageNo = opation.pageNo + 1;
        }

        geetdata(url, opation, htmlurl, scripturl, name, isLog, callback);
        printLog("next",null, opation, isLog);
    }

    /**
     * 最后一页
     */
    function lastPage(name, url, htmlurl, scripturl, cookies, isLog, callback) {
        var value = $.cookie(name);
        var opation = JSON.parse(value);
        opation.pageNo = opation.pageCount;
        geetdata(url, opation, htmlurl, scripturl, name, isLog, callback);
        printLog("lastPage",null, opation, isLog);
    }

    /**
     * 获取图片地址
     */
    function geetImg(imgUrl, n) {
        if(imgUrl == '') {
            return null;
        }
        if(n=='') {
            return imgUrl;
        }
        var imgurls = new Array();
        imgurls = imgUrl.split(',');
        if(n>imgurls.length+1) {
            alert('传递的参数有误,图片取数大于图片个数!\n注意：取数索引从1开始');
        } else {
            return imgurls[n-1];
        }
        return '';
    }

    /**
     * 打开新页面
     * @param url 网页地址
     * @param isNew 是否是新窗口打开
     */
    function openUrl(url , isNew){
        if(isNew) {
            window.open(url);
        } else {
            window.location.href = url;
        }
        printLog("openUrl", null, url, isLog);
    }

    /**
     * 获取参数值
     * @returns {Object}    返回参数对象
     * 例如/index.html?id=123     用法是geetOpation()['id']
     */
    function geetOpation() {
        var url=location.search;
        var Request = new Object();
        if(url.indexOf("?")!=-1){
            var str = url.substr(1);
            strs = str.split("&");
            for(var i=0;i<strs.length;i++){
                Request[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);
            }
        }
        printLog("geetOpation", null, Request, isLog);
        return Request;

    }

    /**
     *  获取请求头里面参数的值
     * @param name      参数名
     * @returns {*}     对应的值
     *      例如：geetRequestValueByParameter('id');
     */
    function geetRequestValueByParameter(name) {
        var opation = geetOpation();
        printLog("geetRequestValueByParameter", null,opation[name] , isLog)
        return opation[name];
    }
    /**
     * 打印日志模块
     * @param funName   函数名
     * @param block     模块名
     * @param result    执行结果
     * @param isLog     是否打印
     *      例如printLog(geetdata,getjson,null)   // 在geetdata中。。。
     */
    function printLog(funName, block,result , isLog) {
        if(isLog) {
           var string = '';
            if(funName) {
                string += ('在' + funName + '函数中');
            }
            if(block) {
                string += ('在' + block + '函数中');
            }
            if(result) {
                string += ('执行结果为' + block + '');
            }
//            console.info(string);
            if(isLog) {
                console.log("执行结果详情")
                console.info(result);
            }

        }

    }
    /**
     * 字数限制函数（用于截断文本）
     * @param content   需截断的原始文本
     * @param n         要截断的个数
     * @returns {*}     截断结果...
     */
    function wordLimit(content, n) {
        if(content == '') {
            return null;
        }else if(content.length < n){
            return content;
        } else {
            return content.substring(0,n)+"...";
        }
    }

    (function(){    /* 添加时间原型，用于格式化代码 */
        Date.prototype.format =function(format)
        {
            var o = {
                "M+" : this.getMonth()+1, //month
                "d+" : this.getDate(), //day
                "h+" : this.getHours(), //hour
                "m+" : this.getMinutes(), //minute
                "s+" : this.getSeconds(), //second
                "q+" : Math.floor((this.getMonth()+3)/3), //quarter
                "S" : this.getMilliseconds() //millisecond
            }
            if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
                (this.getFullYear()+"").substr(4- RegExp.$1.length));
            for(var k in o)if(new RegExp("("+ k +")").test(format))
                format = format.replace(RegExp.$1,
                    RegExp.$1.length==1? o[k] :
                        ("00"+ o[k]).substr((""+ o[k]).length));
            return format;
        }

       
    })();
    var byTime = [365*24*60*60*1000,24*60*60*1000,60*60*1000,60*1000,1000];
    var unit = ["年","天","小时","分钟","秒钟"];
    
    function geetDay(atime){/* 几天前 */

        var ct = new Date().getTime()-new Date(atime).getTime();
        if(ct<0){
            return "瞎糊闹！"
        }

        var sb = [];
        for(var i=0;i<byTime.length;i++){
            if(ct<byTime[i]){
                continue;
            }
            var temp = Math.floor(ct/byTime[i]);
            ct = ct%byTime[i];
            if(temp>0){
                sb.push(temp+unit[i]);
            }


            /*一下控制最多输出几个时间单位：
             一个时间单位如：N分钟前
             两个时间单位如：M分钟N秒前
             三个时间单位如：M年N分钟X秒前
             以此类推
             */
            if(sb.length>=1){
                break;
            }
        }
        return (sb.join("")+"前");
    }

    /**
     * 格式化时间代码
     * @param name  模板名字
     * @param date  时间字符串
     *      例如 2016-03-16
     */
    function getdateByString(date,name) {
        var temp = new Date(date)
        return temp.format(name);
    }
    /**
     * 调用示例：
     * 1.截断文字内容
     *     例如：{{value.summary | wordLimit:'30'}}
     */
    template.helper("wordLimit", wordLimit);

    /**
     * 调用示例：
     * 2.改变图片选取位置
     *      例如{{value.imgUrl | geetImgByIndex:'1'}}"
     */
    template.helper("geetImgByIndex", geetImg);

    /**
     * 调用示例：
     * 3.改变时间格式
     *      例如{{value.Create | getDate:'yyyy-MM-dd'}}"
     *          {{value.Create | getDate:'yyyy-MM-dd hh:mm:ss'}}"
     */
    template.helper("getDate", getdateByString);
    /**
     * 调用示例：
     * 4.改变时间显示
     *      例如{{value.Create | getDate:'yyyy-MM-dd'}}"
     *          {{value.Create | getDate:'yyyy-MM-dd hh:mm:ss'}}"
     *      例如 {{value.Create | getDate:'yyyy-MM-dd hh:mm:ss'}}"   {value.Create | getDate:'yyyy-MM-dd hh:mm:ss'}}"
     */
    template.helper("geetDay", geetDay);

//});
